package gestionnaires;  
 /*
 * @author Julien Bellaiche
 * @author Romain Louveau
 */

import java.util.Collection;  
import javax.ejb.Stateless;  
import javax.persistence.EntityManager;  
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;  
import javax.persistence.Query;  
import modeles.Utilisateur;  
  
@Stateless  
public class GestionnaireUtilisateurs {  
    // Ici injection de code : on n'initialise pas. L'entity manager sera créé  
    // à partir du contenu de persistence.xml  
    @PersistenceContext  
    private EntityManager em;  
  
    public void creerUtilisateursDeTest() {  
        creeUtilisateur("John", "Lennon", "jlennon");  
        creeUtilisateur("Paul", "Mac Cartney", "pmc");  
        creeUtilisateur("Ringo", "Starr", "rstarr");  
        creeUtilisateur("Georges", "Harisson", "georgesH"); 
        
        creeUtilisateur("Jacques", "Chirac", "Jacko");  
        creeUtilisateur("Nicolas", "Sarkozy", "Sarko");  
        creeUtilisateur("Edouard", "Balladur", "Ballou");  
        creeUtilisateur("Barack", "Obama", "Barako");  
        
        creeUtilisateur("Stevie", "Wonder", "Stev");  
        creeUtilisateur("Michael", "Jackson", "Jacks");  
        creeUtilisateur("Elvis", "Presley", "Le king");  
        creeUtilisateur("Johnny", "Haliiday", "Jojo"); 
        
        creeUtilisateur("Pierre", "Dupond", "Pierrot");  
        creeUtilisateur("Pierry", "Jack", "Jacky");  
        creeUtilisateur("Tom", "Dutronc", "TomTom");  
        creeUtilisateur("Henry", "Dunand", "Riri");   
        
        creeUtilisateur("Manuel", "Henry", "Manu");  
        creeUtilisateur("Jean", "Gabbin", "MC jean Gabbin");  
        creeUtilisateur("Ken", "Adams", "Ken");  
        creeUtilisateur("Joey", "Starr", "Joey Star");  
        
        
        creeUtilisateur("Yves", "Simon", "Yvon");  
        creeUtilisateur("Michel", "Polnaref", "Polnaref");  
        creeUtilisateur("Michael", "Youn", "Micka");  
        creeUtilisateur("Mat", "Pokora", "MP");  
        
        creeUtilisateur("50", "Cents", "50 cents");  
        creeUtilisateur("Brad", "Pitt", "Brady");  
        creeUtilisateur("Angelina", "Jolie", "Lara croft");  
        creeUtilisateur("Claude", "François", "Cloclo");  
        
        creeUtilisateur("Snoop", "Dogg", "Snoooop");  
        creeUtilisateur("Natacha", "Amal", "Nat");  
        creeUtilisateur("François", "Hollande", "FanFan");  
        creeUtilisateur("François", "Bayrou", "Bayrou"); 
        
        creeUtilisateur("Gad", "Elmaleh", "Gad");  
        creeUtilisateur("Jean", "Jardillier", "Jardi");  
        creeUtilisateur("Romain", "Louveau", "Louv");  
        creeUtilisateur("Michel", "Buffa", "Secret"); 
  
        
        
    }  
  
    public Utilisateur creeUtilisateur(String nom, String prenom, String lelogin) {   
        Utilisateur userToCreate = getUserFromLogin(lelogin);
        if(userToCreate == null){
            Utilisateur u = new Utilisateur(nom, prenom, lelogin); 
            em.persist(u);  
            return u;
            
        }else {
            return null;
        } 
    }  
  
    public Collection<Utilisateur> getAllUsers() {  
        // Exécution d'une requête équivalente à un select *  
        Query q = em.createQuery("select u from Utilisateur u");  
        return q.getResultList();
    }  

    public Collection<Utilisateur> getNextUsers(int deb,int nbr) {  
        try {
            Query q = em.createQuery("select u from Utilisateur u");  
            q.setFirstResult(deb);
            q.setMaxResults(nbr);
            return q.getResultList();
        } catch (NoResultException e){
            return null;
        }
    } 

    public Collection<Utilisateur> getPrevUsers(int deb,int nbr) {  
       try {
            Query q = em.createQuery("select u from Utilisateur u");  
            q.setFirstResult(deb-nbr);
            q.setMaxResults(nbr);
            return q.getResultList();
        } catch (NoResultException e){
            return null;
        }
    }
    
    public Utilisateur getUserFromLogin(String userlogin)  {
        try {
            Query q = em.createQuery("select u from Utilisateur u where u.login=:ulogin ").setParameter("ulogin", userlogin);
            return (Utilisateur) q.getSingleResult(); 
        } catch (NoResultException e){
            return null;
        }
    }
    
    public int updateUser (final String ulogin, final String ulastname, final String ufirstname) {
        Query q = em.createQuery("update Utilisateur u set u.firstname=:ufirstname, u.lastname=:ulastname where u.login=:ulogin ");
              q.setParameter("ulogin", ulogin);
              q.setParameter("ufirstname", ufirstname);
              q.setParameter("ulastname", ulastname);
       int deletUser = q.executeUpdate();
       return deletUser;
    }
    
    public int deleteUser (final String ulogin) {
        Query q = em.createQuery("delete from Utilisateur u where u.login=:ulogin ");
              q.setParameter("ulogin", ulogin);
       int deleteUser = q.executeUpdate();
       return deleteUser;
    }
    
}  